package com.iwhalecloud.bss.kite.cucc.service.attr.linkhandler;

import com.iwhalecloud.bss.kite.cucc.service.attr.handler.CoordinationDiscountRateAttrHandler;
import com.iwhalecloud.bss.kite.listener.handler.attr.annotation.AttrHandler;
import com.iwhalecloud.bss.kite.listener.handler.attr.impl.AbstractAttrLinkageHandler;
import com.iwhalecloud.bss.kite.manager.api.IQuerySceneInstService;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttr;
import com.iwhalecloud.bss.kite.manager.inst.KiteInst;
import com.iwhalecloud.bss.kite.service.attr.AttrData;
import com.iwhalecloud.bss.kite.service.scene.attr.OperateInstAttrService;
import java.text.DecimalFormat;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 雁飞格物DMP平台-云边协同折扣率属性联动
 *
 * @author LIFF
 */
@Service
@AttrHandler(CoordinationDiscountRateAttrHandler.class)
public class CoordinationDiscountRateAttrLinkHandler extends AbstractAttrLinkageHandler<AttrData> {

  @Autowired OperateInstAttrService operateInstAttrService;

  @Resource private IQuerySceneInstService querySceneInstService;

  @Override
  public void handle(KiteAttr attr, KiteInst inst, AttrData data) {
    // 版本结算折扣率（%）
    KiteAttr attr1 = inst.getAttr("210008125");
    // 结算价格
    KiteAttr attr2 = inst.getAttr("210008109");
    // 运维服务费用价格（万元）
    KiteAttr attr3 = inst.getAttr("210008126");
    // 版本订购年限（年）
    KiteAttr attr4 = inst.getAttr("210008135");
    // 销售价格
    KiteAttr attr5 = inst.getAttr("210008110");

    Double discountRate = StringUtils.isEmpty(attr1.getValue()) ? 1.0 : (Double.valueOf(attr1.getValue())/100);

    DecimalFormat df = new DecimalFormat("#.###");

    if ("210008135".equals(attr.getFieldName())) {
      // 与运维服务订购年限（年）保持一致
      operateInstAttrService.setAttrValue(inst, "210008119", attr4.getValue(), data.getSceneInstId(), null);
    }
    // 运维服务总结算价（万元
    Double d1 = 0.0;
    if ((StringUtils.isNotEmpty(attr3.getValue()) || StringUtils.isNotEmpty(attr3.getDefaultValue()))&& StringUtils.isNotEmpty(attr4.getValue())) {
      // 运维服务费用价格（万元）
      Double operatePrice = Double.valueOf(StringUtils.isNotEmpty(attr3.getValue()) ? attr3.getValue() : attr3.getDefaultValue());
      // 运维服务总结算价（万元）=运维服务费用价格（万元）*运维服务订购年限（年）
      d1 = Double.valueOf(attr4.getValueDesc()) * operatePrice;
      operateInstAttrService.setAttrValue(inst, "210008120", df.format(d1), data.getSceneInstId(), null);
    }

    // 总结算价格（万元）=结算价格（万元）×版本结算折扣率（%）+运维服务总结算价（万元）
    Double jsPrice = Double.valueOf(StringUtils.isEmpty(attr2.getValue()) ? attr2.getDefaultValue() : attr2.getValue());
    operateInstAttrService.setAttrValue(inst, "210008122", df.format(jsPrice * discountRate + d1), data.getSceneInstId(), null);

    if ("210008135".equals(attr.getFieldName()) || "210008110".equals(attr.getFieldName())) {
      // 销售价格（万元）
      Double salesPrice = StringUtils.isEmpty(attr5.getValue()) ? 0 : Double.valueOf(attr5.getValue());

      // 总销售价格（万元）=销售价格（万元）+运维服务总结算价（万元）
      operateInstAttrService.setAttrValue(inst, "210008123", df.format(salesPrice + d1), data.getSceneInstId(), null);
    }
  }

  @Override
  public void handleStyle(KiteAttr attr, KiteInst inst, AttrData data) {}
}
